// app.js
import config from './utils/config'
const request = require('./utils/promise.js');
const aesUtil = require('./utils/aes_util.js')
const baseUtil = require('./utils/util.js')

App({
  onLaunch() {

    // 查询与存储，客户端id，作为唯一标识
    try {
      var value = wx.getStorageSync('cui');
      if (!value) {
        let uuid = baseUtil.getUUID().toUpperCase();
        let cui = aesUtil.getAES(uuid);
        wx.setStorageSync('cui', cui);
      }
    } catch (e) {
      // Do something when catch error
    }

    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId，以及基础用户信息
        if (res.code) {
          request.GET("/user/onLogin/code2Session", {
            code: res.code
          }).then(res => {
            console.log('登录获取 openId: ', res);
            if (res.data && res.data.success) {
              wx.setStorageSync('userId', res.data.userId); // 缓存用户id，如果第一次注册是id为-1
              wx.setStorageSync('username', res.data.username); // 缓存昵称, 如果第一次注册时为空
              wx.setStorageSync('avatarUrl', res.data.avatarUrl); // 缓存用户头像, 如果第一次注册时默认灰色头像
              wx.setStorageSync('openId', res.data.openId); // 缓存用户
            }
          })
        }
      }
    })

  },
  // onShow(options) {
  //   // 小程序启动 或者 切回小程序前台后，触发
  //   this.initSocketTask();
  // },
  // onHide() {
  //   // 小程序被切后台，其中右上角圆圈退出，也会触发
  //   // 关闭 WebSocket 连接
  //   if (this.globalData.oaSocketTask.readyState == 1) {
  //     this.globalData.oaSocketTask.close({
  //       code: 1000,
  //       reason: '切换为后台模式 或 退出'
  //     });
  //   }
  // },
  
  /**
   * 尝试初始化连接
   */
  initSocketTask() {
    // 存在账户id 并且 (socket对象为空 或者 处于关闭状态)，才需要初始化 socket
    if ((wx.getStorageSync('userId') && wx.getStorageSync('userId') != -1) && (JSON.stringify(this.globalData.oaSocketTask) == '{}' || this.globalData.oaSocketTask.readyState == 3)) {
      let oaSocket = wx.connectSocket({
        url: config.wssUrl + '?userId=' + wx.getStorageSync('userId'),
        header: {
          'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
        },
        success: res => {
          console.log('创建 WebSocket 连接，调用成功');
        },
        fail: err => {
          console.log('创建 WebSocket 连接，调用失败！');

        }
      })
      // 创建之后直接赋值给 app 全局变量 （注意：这是异步，连接状态会延迟刷新，onOpen会延迟执行）
      this.globalData.oaSocketTask = oaSocket;

      oaSocket.onOpen(res => {
        // 状态 {"CONNECTING":0,"OPEN":1,"CLOSING":2,"CLOSED":3}
        console.log('打开 WebSocket 连接，readyState = ' + oaSocket.readyState);

        // 接收消息事件回调
        oaSocket.onMessage(res => {
          // 解决重复进入同一页面，onMessage多次执行的问题
          let pages = getCurrentPages();
          let currentPage = pages[pages.length - 1]; // 当前页面
          if (currentPage.oaOnMessage) currentPage.oaOnMessage(res);
        })
      });

      oaSocket.onClose(res => {
        // code为1000，表示正常关闭连接
        console.log('关闭 WebSocket 连接（提示：code为1000，表示正常关闭），对象内容：' + JSON.stringify(res));
      })

      oaSocket.onError(res => {
        console.log('异常 WebSocket，报错内容： ' + JSON.stringify(res));
      })
    } else {
      console.log('未满足 WebbSocket 初始条件，初始化失败！');
    }
  },
  globalData: {
    oaSocketTask: {},
    userInfo: null,
    isShowAuthModal: false
  }
    
})